സർവീസ് മെഷ് ഇൻ്റഗ്രേഷനോടുകൂടിയ പൈത്തൺ API ഗേറ്റ്വേ വികസനം മനസ്സിലാക്കുക. മൈക്രോസർവീസുകൾ, റൂട്ടിംഗ്, ഓതൻ്റിക്കേഷൻ, ഒബ്സെർവബിലിറ്റി എന്നിവയെക്കുറിച്ച് പഠിക്കുക.
പൈത്തൺ API ഗേറ്റ്വേ: ആധുനിക ആർക്കിടെക്ചറുകൾക്കുള്ള സർവീസ് മെഷ് ഇംപ്ലിമെൻ്റേഷൻ
വേഗതയിൽ മാറിക്കൊണ്ടിരിക്കുന്ന ഇന്നത്തെ ഡിജിറ്റൽ ലോകത്ത്, അളക്കാവുന്നതും, പ്രതിരോധശേഷിയുള്ളതും, പരിപാലിക്കാൻ എളുപ്പമുള്ളതുമായ ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കുന്നതിന് മൈക്രോസർവീസ് ആർക്കിടെക്ചറുകൾ ഒരു സാധാരണ രീതിയായി മാറിയിരിക്കുന്നു. ഈ ആർക്കിടെക്ചറുകളുടെ ഹൃദയഭാഗത്ത്, സർവീസുകൾ തമ്മിലുള്ള കാര്യക്ഷമവും സുരക്ഷിതവുമായ ആശയവിനിമയത്തിൻ്റെ ആവശ്യകതയുണ്ട്. ഇവിടെയാണ് എപിഐ ഗേറ്റ്വേകളും സർവീസ് മെഷുകളും കടന്നുവരുന്നത്. ഈ ലേഖനം പൈത്തൺ അടിസ്ഥാനമാക്കിയുള്ള ഒരു എപിഐ ഗേറ്റ്വേ എങ്ങനെ നിർമ്മിക്കാമെന്നും അത് ഒരു സർവീസ് മെഷുമായി എങ്ങനെ സംയോജിപ്പിക്കാമെന്നും പര്യവേക്ഷണം ചെയ്യുന്നു, ആഗോള പശ്ചാത്തലത്തിൽ മൈക്രോസർവീസ് ആശയവിനിമയം കൈകാര്യം ചെയ്യുന്നതിനുള്ള ശക്തമായ ഒരു പരിഹാരം നൽകുന്നു.
API ഗേറ്റ്വേകളും സർവീസ് മെഷുകളും മനസ്സിലാക്കാം
എന്താണ് ഒരു API ഗേറ്റ്വേ?
ഒരു മൈക്രോസർവീസസ് ബാക്കെൻഡിലേക്കുള്ള എല്ലാ ക്ലയിൻ്റ് അഭ്യർത്ഥനകൾക്കും ഒരൊറ്റ എൻട്രി പോയിൻ്റായി എപിഐ ഗേറ്റ്വേ പ്രവർത്തിക്കുന്നു. ഇത് താഴെ പറയുന്ന ജോലികൾ കൈകാര്യം ചെയ്യുന്നു:
- റൂട്ടിംഗ്: അഭ്യർത്ഥനകളെ ശരിയായ മൈക്രോസർവീസിലേക്ക് നയിക്കുന്നു.
- ഓതൻ്റിക്കേഷനും ഓതറൈസേഷനും: ക്ലയിൻ്റിൻ്റെ ഐഡൻ്റിറ്റി പരിശോധിക്കുകയും അവർക്ക് ആവശ്യമായ അനുമതികൾ ഉണ്ടെന്ന് ഉറപ്പാക്കുകയും ചെയ്യുന്നു.
- റേറ്റ് ലിമിറ്റിംഗ്: ദുരുപയോഗം തടയുകയും സേവനങ്ങളുടെ ന്യായമായ ഉപയോഗം ഉറപ്പാക്കുകയും ചെയ്യുന്നു.
- അഭ്യർത്ഥന രൂപാന്തരം: ബാക്കെൻഡിലേക്ക് അയയ്ക്കുന്നതിന് മുമ്പ് അഭ്യർത്ഥനകളിൽ മാറ്റം വരുത്തുന്നു.
- പ്രതികരണ സമാഹരണം: ഒന്നിലധികം മൈക്രോസർവീസുകളിൽ നിന്നുള്ള പ്രതികരണങ്ങളെ ഒരൊറ്റ പ്രതികരണമായി സംയോജിപ്പിക്കുന്നു.
- കാഷിംഗ്: ലേറ്റൻസി കുറയ്ക്കുകയും പ്രകടനം മെച്ചപ്പെടുത്തുകയും ചെയ്യുന്നു.
നിങ്ങളുടെ ആപ്ലിക്കേഷന് വേണ്ടി എല്ലാ ഇൻകമിംഗ് ട്രാഫിക്കും കൈകാര്യം ചെയ്യുകയും അത് സുരക്ഷിതമായും കാര്യക്ഷമമായും ശരിയായ സ്ഥലത്ത് എത്തുന്നുവെന്ന് ഉറപ്പാക്കുകയും ചെയ്യുന്ന ഒരു വിദഗ്ദ്ധനായ റിസപ്ഷനിസ്റ്റായി ഇതിനെ കരുതാം. ഉദാഹരണത്തിന്, ഓസ്ട്രേലിയയിലുള്ള ഒരു മൊബൈൽ ആപ്ലിക്കേഷൻ എപിഐ ഗേറ്റ്വേയിലേക്ക് ഒരു അഭ്യർത്ഥന അയച്ചേക്കാം, അത് പിന്നീട് സിംഗപ്പൂരിലുള്ള ഒരു പ്രൈസിംഗ് സർവീസിലേക്കും ജർമ്മനിയിലുള്ള ഒരു ഇൻവെൻ്ററി സർവീസിലേക്കും റൂട്ട് ചെയ്യുകയും, ഫലങ്ങൾ സംയോജിപ്പിച്ച് ഉപയോക്താവിന് തിരികെ നൽകുകയും ചെയ്യുന്നു.
എന്താണ് ഒരു സർവീസ് മെഷ്?
ഒരു മൈക്രോസർവീസ് ആർക്കിടെക്ചറിനുള്ളിൽ സർവീസുകൾ തമ്മിലുള്ള ആശയവിനിമയം കൈകാര്യം ചെയ്യുന്ന ഒരു ഇൻഫ്രാസ്ട്രക്ചർ ലെയറാണ് സർവീസ് മെഷ്. ഇത് താഴെ പറയുന്ന സവിശേഷതകൾ നൽകുന്നു:
- സർവീസ് ഡിസ്കവറി: ഒരു സർവീസിൻ്റെ ലഭ്യമായ ഇൻസ്റ്റൻസുകൾ സ്വയമേവ കണ്ടെത്തുന്നു.
- ട്രാഫിക് മാനേജ്മെൻ്റ്: ലോഡ് ബാലൻസിംഗ്, റൂട്ടിംഗ്, സർക്യൂട്ട് ബ്രേക്കിംഗ് എന്നിവ ഉൾപ്പെടെ സർവീസുകൾക്കിടയിലുള്ള ട്രാഫിക്കിൻ്റെ ഒഴുക്ക് നിയന്ത്രിക്കുന്നു.
- ഒബ്സെർവബിലിറ്റി: സർവീസുകളുടെ പ്രകടനത്തെയും ആരോഗ്യത്തെയും കുറിച്ചുള്ള ഉൾക്കാഴ്ചകൾ നൽകുന്നു.
- സുരക്ഷ: സർവീസുകൾക്കിടയിലുള്ള ആശയവിനിമയം എൻക്രിപ്റ്റ് ചെയ്യുകയും സുരക്ഷാ നയങ്ങൾ നടപ്പിലാക്കുകയും ചെയ്യുന്നു.
സർവീസ് മെഷ് സാധാരണയായി ഒരു കൺട്രോൾ പ്ലെയ്നും (ഉദാഹരണത്തിന്, ഇസ്റ്റിയോ) ഒരു ഡാറ്റാ പ്ലെയ്നും (ഉദാഹരണത്തിന്, എൻവോയ്) ഉൾക്കൊള്ളുന്നു. ഡാറ്റാ പ്ലെയ്ൻ എല്ലാ സർവീസ്-ടു-സർവീസ് ആശയവിനിമയത്തെയും തടസ്സപ്പെടുത്തുകയും കൺട്രോൾ പ്ലെയ്ൻ നിർവചിച്ചിരിക്കുന്ന നയങ്ങൾ പ്രയോഗിക്കുകയും ചെയ്യുന്നു. സന്ദേശങ്ങൾ സുരക്ഷിതമായും വിശ്വസനീയമായും കാര്യക്ഷമമായും എത്തിക്കുന്നുവെന്ന് ഉറപ്പാക്കുന്ന, എല്ലാ ആന്തരിക ആശയവിനിമയങ്ങളും കൈകാര്യം ചെയ്യുന്ന അദൃശ്യരായ കൊറിയർമാരുടെ ഒരു ശൃംഖലയെ സങ്കൽപ്പിക്കുക. ഒരു സർവീസ് മെഷ് ഡിഫോൾട്ടായി സീറോ-ട്രസ്റ്റ് നെറ്റ്വർക്കിംഗ് പ്രാപ്തമാക്കുന്നു - ഓരോ സർവീസും മറ്റ് ഓരോ സർവീസിനെയും ഓതൻ്റിക്കേറ്റ് ചെയ്യുന്നു, അവ എവിടെ സ്ഥിതിചെയ്യുന്നു എന്നത് പരിഗണിക്കാതെ തന്നെ. വിവിധ ഭൂമിശാസ്ത്രപരമായ പ്രദേശങ്ങളിൽ സേവനങ്ങൾ വ്യാപിപ്പിച്ചിട്ടുള്ള മൾട്ടിനാഷണൽ കോർപ്പറേഷനുകളിൽ ഇത് വളരെ പ്രധാനമാണ്.
എന്തിനാണ് ഒരു API ഗേറ്റ്വേയും സർവീസ് മെഷും സംയോജിപ്പിക്കുന്നത്?
API ഗേറ്റ്വേകളും സർവീസ് മെഷുകളും മൈക്രോസർവീസ് ആശയവിനിമയത്തെ അഭിസംബോധന ചെയ്യുന്നുണ്ടെങ്കിലും, അവ വ്യത്യസ്ത ലെയറുകളിൽ പ്രവർത്തിക്കുകയും വ്യത്യസ്ത പ്രശ്നങ്ങൾ പരിഹരിക്കുകയും ചെയ്യുന്നു. ഒരു എപിഐ ഗേറ്റ്വേ ബാഹ്യ ട്രാഫിക് കൈകാര്യം ചെയ്യുന്നതിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുമ്പോൾ, ഒരു സർവീസ് മെഷ് ആന്തരിക ട്രാഫിക് കൈകാര്യം ചെയ്യുന്നതിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നു. ഇവ രണ്ടും സംയോജിപ്പിക്കുന്നത് ക്ലസ്റ്ററിനകത്തും പുറത്തും മൈക്രോസർവീസ് ആശയവിനിമയം സുരക്ഷിതമാക്കുന്നതിനും, കൈകാര്യം ചെയ്യുന്നതിനും, നിരീക്ഷിക്കുന്നതിനും ഒരു സമഗ്രമായ പരിഹാരം നൽകുന്നു.
ഉദാഹരണത്തിന്, ഒരു ഇ-കൊമേഴ്സ് പ്ലാറ്റ്ഫോം പരിഗണിക്കുക. എപിഐ ഗേറ്റ്വേ വെബ്, മൊബൈൽ ആപ്ലിക്കേഷനുകളിൽ നിന്നുള്ള അഭ്യർത്ഥനകൾ കൈകാര്യം ചെയ്യുന്നു, ഉപയോക്താക്കളെ ഓതൻ്റിക്കേറ്റ് ചെയ്യുന്നു, റേറ്റ് ലിമിറ്റുകൾ പ്രയോഗിക്കുന്നു, കൂടാതെ അഭ്യർത്ഥനകളെ ഉചിതമായ ബാക്കെൻഡ് സർവീസുകളിലേക്ക് റൂട്ട് ചെയ്യുന്നു. സർവീസ് മെഷ് ബാക്കെൻഡ് സർവീസുകൾക്കിടയിലുള്ള ആശയവിനിമയം കൈകാര്യം ചെയ്യുന്നു, പ്രൊഡക്റ്റ് കാറ്റലോഗ്, ഓർഡർ മാനേജ്മെൻ്റ്, പേയ്മെൻ്റ് പ്രോസസ്സിംഗ് സർവീസുകൾ എന്നിവയ്ക്കിടയിൽ സുരക്ഷിതവും വിശ്വസനീയവുമായ ആശയവിനിമയം ഉറപ്പാക്കുന്നു. എപിഐ ഗേറ്റ്വേ ഒക്ട (Okta) അല്ലെങ്കിൽ ഓത്ത്0 (Auth0) പോലുള്ള ബാഹ്യ ഓതൻ്റിക്കേഷൻ സർവീസുകൾ ഉപയോഗിച്ചേക്കാം, അതേസമയം സർവീസ് മെഷ് മ്യൂച്വൽ ടിഎൽഎസ് (mTLS) ഉപയോഗിച്ച് ആന്തരിക സർവീസുകൾക്കിടയിൽ സുരക്ഷിതമായ ആശയവിനിമയം ഉറപ്പാക്കുന്നു.
ഒരു പൈത്തൺ API ഗേറ്റ്വേ നിർമ്മിക്കാം
ലൈബ്രറികളുടെയും ഫ്രെയിംവർക്കുകളുടെയും സമ്പന്നമായ ഇക്കോസിസ്റ്റം ഉള്ള പൈത്തൺ, എപിഐ ഗേറ്റ്വേകൾ നിർമ്മിക്കുന്നതിനുള്ള മികച്ച ഒരു തിരഞ്ഞെടുപ്പാണ്. അളക്കാവുന്നതും പരിപാലിക്കാൻ എളുപ്പമുള്ളതുമായ ഒരു ഗേറ്റ്വേ നിർമ്മിക്കാൻ ഞങ്ങൾ ഫ്രെയിംവർക്കുകളുടെ ഒരു സംയോജനം ഉപയോഗിക്കും.
ഫ്രെയിംവർക്ക് തിരഞ്ഞെടുക്കൽ
- FastAPI: API-കൾ നിർമ്മിക്കുന്നതിനുള്ള ഒരു ആധുനികവും ഉയർന്ന പ്രകടനശേഷിയുള്ളതുമായ വെബ് ഫ്രെയിംവർക്ക്. FastAPI ഓട്ടോമാറ്റിക് ഡാറ്റാ വാലിഡേഷൻ, സീരിയലൈസേഷൻ, ഡോക്യുമെൻ്റേഷൻ ജനറേഷൻ എന്നിവ നൽകുന്നു.
- Uvicorn: അസിൻക്രണസ് പൈത്തൺ ആപ്ലിക്കേഷനുകൾ പ്രവർത്തിപ്പിക്കുന്നതിനുള്ള ഒരു ASGI സെർവർ.
- Requests: ബാക്കെൻഡ് സർവീസുകളിലേക്ക് HTTP അഭ്യർത്ഥനകൾ നടത്തുന്നതിനുള്ള ഒരു ലൈബ്രറി. കൂടുതൽ സങ്കീർണ്ണമായ സാഹചര്യങ്ങൾക്കായി, അസിൻക് പിന്തുണ നൽകുന്ന `httpx` ഉപയോഗിക്കുന്നത് പരിഗണിക്കുക.
- PyJWT: ഓതൻ്റിക്കേഷനായി JSON വെബ് ടോക്കണുകൾ (JWTs) ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നതിനുള്ള ഒരു ലൈബ്രറി.
പ്രോജക്റ്റ് ഘടന
api_gateway/ ├── main.py # പ്രധാന ആപ്ലിക്കേഷൻ ഫയൽ ├── config.py # കോൺഫിഗറേഷൻ ക്രമീകരണങ്ങൾ ├── routes.py # API റൂട്ടിംഗ് നിർവചനങ്ങൾ ├── auth.py # ഓതൻ്റിക്കേഷൻ ലോജിക് ├── utils.py # യൂട്ടിലിറ്റി ഫംഗ്ഷനുകൾ └── requirements.txt # പ്രോജക്റ്റ് ഡിപൻഡൻസികൾ
ഉദാഹരണ കോഡ്: main.py
from fastapi import FastAPI, Depends, HTTPException, Request
from fastapi.responses import JSONResponse
import uvicorn
import requests
import jwt
from config import settings
from auth import verify_jwt
from routes import router
app = FastAPI()
app.include_router(router)
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
response = await call_next(request)
return response
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
ഉദാഹരണ കോഡ്: routes.py
from fastapi import APIRouter, Depends, HTTPException, Request
from fastapi.responses import JSONResponse
import requests
import jwt
from config import settings
from auth import verify_jwt
router = APIRouter()
@router.get("/products/{product_id}")
async def get_product(product_id: int, request: Request, is_authenticated: bool = Depends(verify_jwt)):
# പ്രൊഡക്ട് സർവീസിലേക്ക് അഭ്യർത്ഥന ഫോർവേഡ് ചെയ്യുക
product_service_url = f"{settings.product_service_url}/products/{product_id}"
try:
response = requests.get(product_service_url)
response.raise_for_status() # മോശം പ്രതികരണങ്ങൾക്കായി (4xx അല്ലെങ്കിൽ 5xx) HTTPError ഉയർത്തുക
return response.json()
except requests.exceptions.RequestException as e:
raise HTTPException(status_code=500, detail=f"Error communicating with product service: {e}")
@router.post("/orders")
async def create_order(request: Request, is_authenticated: bool = Depends(verify_jwt)):
# ഓർഡർ സർവീസിലേക്ക് അഭ്യർത്ഥന ഫോർവേഡ് ചെയ്യുക
order_service_url = f"{settings.order_service_url}/orders"
body = await request.json()
try:
response = requests.post(order_service_url, json=body)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
raise HTTPException(status_code=500, detail=f"Error communicating with order service: {e}")
ഉദാഹരണ കോഡ്: auth.py
from fastapi import HTTPException, Depends, Header
import jwt
from config import settings
from typing import Optional
async def verify_jwt(authorization: Optional[str] = Header(None)) -> bool:
if not authorization:
raise HTTPException(status_code=401, detail="Authorization header is required")
try:
token = authorization.split(" ")[1]
jwt.decode(token, settings.jwt_secret, algorithms=[settings.jwt_algorithm])
return True
except jwt.ExpiredSignatureError:
raise HTTPException(status_code=401, detail="Token has expired")
except jwt.InvalidTokenError:
raise HTTPException(status_code=401, detail="Invalid token")
ഉദാഹരണ കോഡ്: config.py
import os
from typing import Optional
from pydantic import BaseSettings
class Settings(BaseSettings):
product_service_url: str = os.getenv("PRODUCT_SERVICE_URL", "http://localhost:8001")
order_service_url: str = os.getenv("ORDER_SERVICE_URL", "http://localhost:8002")
jwt_secret: str = os.getenv("JWT_SECRET", "secret")
jwt_algorithm: str = os.getenv("JWT_ALGORITHM", "HS256")
settings = Settings()
കോൺഫിഗറേഷൻ
ബാക്കെൻഡ് സർവീസ് URL-കൾ, ഓതൻ്റിക്കേഷൻ കീകൾ തുടങ്ങിയ കോൺഫിഗറേഷൻ ക്രമീകരണങ്ങൾ ഒരു പ്രത്യേക കോൺഫിഗറേഷൻ ഫയലിൽ (ഉദാഹരണത്തിന്, `config.py`) സൂക്ഷിക്കുക. വ്യത്യസ്ത എൻവയോൺമെൻ്റുകൾ (ഡെവലപ്മെൻ്റ്, സ്റ്റേജിംഗ്, പ്രൊഡക്ഷൻ) കോൺഫിഗർ ചെയ്യുന്നതിന് എൻവയോൺമെൻ്റ് വേരിയബിളുകൾ ഉപയോഗിക്കുക.
ഓതൻ്റിക്കേഷൻ
JWT-കൾ ഉപയോഗിച്ച് ഓതൻ്റിക്കേഷൻ നടപ്പിലാക്കുക. ബാക്കെൻഡ് സർവീസിലേക്ക് അഭ്യർത്ഥന ഫോർവേഡ് ചെയ്യുന്നതിന് മുമ്പ് എപിഐ ഗേറ്റ്വേ JWT പരിശോധിക്കുന്നു. ഈ സമീപനം സുരക്ഷയും വികേന്ദ്രീകരണവും പ്രോത്സാഹിപ്പിക്കുന്നു. വലിയ സ്ഥാപനങ്ങൾക്കായി, കീക്ലോക്ക് (Keycloak) അല്ലെങ്കിൽ അസൂർ എഡി (Azure AD) പോലുള്ള ഒരു ഐഡൻ്റിറ്റി പ്രൊവൈഡറുമായി സംയോജിപ്പിക്കുന്നത് പരിഗണിക്കുക. ഇത് ഓതൻ്റിക്കേഷൻ, ഓതറൈസേഷൻ നയങ്ങൾ കേന്ദ്രീകരിക്കാൻ സഹായിക്കും.
റൂട്ടിംഗ്
ഒരു പ്രത്യേക ഫയലിൽ (ഉദാഹരണത്തിന്, `routes.py`) റൂട്ടുകൾ നിർവചിക്കുക. ഇൻകമിംഗ് അഭ്യർത്ഥനകളെ ഉചിതമായ ബാക്കെൻഡ് സർവീസുകളിലേക്ക് മാപ്പ് ചെയ്യുന്നതിന് FastAPI-യുടെ റൂട്ടർ പ്രവർത്തനം ഉപയോഗിക്കുക. അഭ്യർത്ഥന പാത്ത്, HTTP മെത്തേഡ്, ഹെഡറുകൾ എന്നിവ അടിസ്ഥാനമാക്കി റൂട്ടിംഗ് നടപ്പിലാക്കുക.
ഉദാഹരണം: API ഗേറ്റ്വേയെ ഡോക്കറൈസ് ചെയ്യുന്നു
എപിഐ ഗേറ്റ്വേയെ ഒരു കണ്ടെയ്നറിലേക്ക് പാക്കേജ് ചെയ്യുന്നതിന് ഒരു `Dockerfile` ഉണ്ടാക്കുക.
FROM python:3.9-slim-buster WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
സർവീസ് മെഷ് ഇൻ്റഗ്രേഷൻ
പൈത്തൺ എപിഐ ഗേറ്റ്വേയെ ഇസ്റ്റിയോ (Istio) പോലുള്ള ഒരു സർവീസ് മെഷുമായി സംയോജിപ്പിക്കുന്നത് സുരക്ഷ, ഒബ്സെർവബിലിറ്റി, ട്രാഫിക് മാനേജ്മെൻ്റ് എന്നിവ മെച്ചപ്പെടുത്തുന്നു. എപിഐ ഗേറ്റ്വേയിലൂടെ ഒഴുകുന്ന ട്രാഫിക് കൈകാര്യം ചെയ്യാൻ ഇസ്റ്റിയോ എങ്ങനെ കോൺഫിഗർ ചെയ്യാമെന്ന് ഞങ്ങൾ ശ്രദ്ധ കേന്ദ്രീകരിക്കും.
ഇസ്റ്റിയോ ഇൻസ്റ്റാളേഷൻ
തുടരുന്നതിന് മുമ്പ്, നിങ്ങളുടെ കുബർനെറ്റസ് ക്ലസ്റ്ററിൽ ഇസ്റ്റിയോ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക. ഇൻസ്റ്റാളേഷൻ നിർദ്ദേശങ്ങൾക്കായി ഔദ്യോഗിക ഇസ്റ്റിയോ ഡോക്യുമെൻ്റേഷൻ പരിശോധിക്കുക. AWS, ഗൂഗിൾ ക്ലൗഡ്, അസൂർ തുടങ്ങിയ പല ക്ലൗഡ് ദാതാക്കളും വിന്യാസവും മാനേജ്മെൻ്റും ലളിതമാക്കുന്ന നിയന്ത്രിത ഇസ്റ്റിയോ സേവനങ്ങൾ വാഗ്ദാനം ചെയ്യുന്നു.
സൈഡ്കാർ ഇൻജെക്ഷൻ
ഒരു സർവീസിലേക്കും പുറത്തേക്കുമുള്ള എല്ലാ ട്രാഫിക്കും തടസ്സപ്പെടുത്താൻ ഇസ്റ്റിയോ ഒരു സൈഡ്കാർ പ്രോക്സി (എൻവോയ്) ഉപയോഗിക്കുന്നു. എപിഐ ഗേറ്റ്വേക്കായി ഇസ്റ്റിയോ പ്രവർത്തനക്ഷമമാക്കുന്നതിന്, എപിഐ ഗേറ്റ്വേയുടെ പോഡിലേക്ക് നിങ്ങൾ സൈഡ്കാർ പ്രോക്സി ഇൻജെക്റ്റ് ചെയ്യേണ്ടതുണ്ട്. ഇത് സാധാരണയായി പോഡ് ഡിപ്ലോയ്മെൻ്റിലേക്ക് ഒരു അനോട്ടേഷൻ ചേർത്താണ് ചെയ്യുന്നത്:
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-gateway
labels:
app: api-gateway
spec:
replicas: 1
selector:
matchLabels:
app: api-gateway
template:
metadata:
labels:
app: api-gateway
annotations:
sidecar.istio.io/inject: "true" # ഇസ്റ്റിയോ സൈഡ്കാർ ഇൻജെക്ഷൻ പ്രവർത്തനക്ഷമമാക്കുക
spec:
containers:
- name: api-gateway
image: your-api-gateway-image:latest
ports:
- containerPort: 8000
വെർച്വൽ സർവീസുകളും ഗേറ്റ്വേകളും
ട്രാഫിക് റൂട്ടിംഗ് കൈകാര്യം ചെയ്യാൻ ഇസ്റ്റിയോ വെർച്വൽ സർവീസുകളും ഗേറ്റ്വേകളും ഉപയോഗിക്കുന്നു. ഒരു ഗേറ്റ്വേ മെഷിലേക്കുള്ള ട്രാഫിക്കിൻ്റെ എൻട്രി പോയിൻ്റ് നിർവചിക്കുന്നു, അതേസമയം ഒരു വെർച്വൽ സർവീസ് മെഷിനുള്ളിലെ സർവീസുകളിലേക്ക് ട്രാഫിക് എങ്ങനെ റൂട്ട് ചെയ്യണമെന്ന് നിർവചിക്കുന്നു.
ഒരു ഇസ്റ്റിയോ ഗേറ്റ്വേ ഉണ്ടാക്കുന്നു
ബാഹ്യ ട്രാഫിക്കിലേക്ക് എപിഐ ഗേറ്റ്വേയെ തുറന്നുകാട്ടാൻ ഒരു ഇസ്റ്റിയോ ഗേറ്റ്വേ നിർവചിക്കുക.
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: api-gateway-gateway
spec:
selector:
istio: ingressgateway # ഇസ്റ്റിയോയുടെ ഡിഫോൾട്ട് ഇൻഗ്രെസ് ഗേറ്റ്വേ ഉപയോഗിക്കുക
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*" # നിങ്ങളുടെ ഡൊമെയ്ൻ ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുക
ഒരു വെർച്വൽ സർവീസ് ഉണ്ടാക്കുന്നു
ഗേറ്റ്വേയിൽ നിന്ന് എപിഐ ഗേറ്റ്വേ സർവീസിലേക്ക് ട്രാഫിക് റൂട്ട് ചെയ്യാൻ ഒരു വെർച്വൽ സർവീസ് നിർവചിക്കുക.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: api-gateway-virtualservice
spec:
hosts:
- "*" # നിങ്ങളുടെ ഡൊമെയ്ൻ ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുക
gateways:
- api-gateway-gateway
http:
- route:
- destination:
host: api-gateway # കുബർനെറ്റസിലെ സർവീസ് നാമം
port:
number: 8000 # എപിഐ ഗേറ്റ്വേ ലിസൺ ചെയ്യുന്ന പോർട്ട്
ഇസ്റ്റിയോ ഉപയോഗിച്ചുള്ള ട്രാഫിക് മാനേജ്മെൻ്റ്
ഇസ്റ്റിയോ ശക്തമായ ട്രാഫിക് മാനേജ്മെൻ്റ് കഴിവുകൾ നൽകുന്നു, അവ താഴെ പറയുന്നവയാണ്:
- ലോഡ് ബാലൻസിംഗ്: ഒരു സർവീസിൻ്റെ ഒന്നിലധികം ഇൻസ്റ്റൻസുകളിലുടനീളം ട്രാഫിക് വിതരണം ചെയ്യുന്നു. റൗണ്ട് റോബിൻ, ലീസ്റ്റ് കണക്ഷൻസ്, കൺസിസ്റ്റൻ്റ് ഹാഷിംഗ് എന്നിവയുൾപ്പെടെ വിവിധ ലോഡ് ബാലൻസിംഗ് അൽഗോരിതങ്ങൾ ഇസ്റ്റിയോ പിന്തുണയ്ക്കുന്നു.
- ട്രാഫിക് സ്പ്ലിറ്റിംഗ് (കാനറി ഡിപ്ലോയ്മെൻ്റ്സ്): ഒരു സർവീസിൻ്റെ പുതിയ പതിപ്പിലേക്ക് ട്രാഫിക്കിൻ്റെ ഒരു ചെറിയ ശതമാനം അയച്ചുകൊണ്ട് പുതിയ പതിപ്പുകൾ ക്രമേണ പുറത്തിറക്കുന്നു. എല്ലാ ഉപയോക്താക്കളെയും ബാധിക്കാതെ പ്രൊഡക്ഷനിൽ പുതിയ ഫീച്ചറുകൾ പരീക്ഷിക്കാൻ ഇത് നിങ്ങളെ അനുവദിക്കുന്നു.
- സർക്യൂട്ട് ബ്രേക്കിംഗ്: ആരോഗ്യകരമല്ലാത്ത സർവീസുകളിലേക്കുള്ള ട്രാഫിക് സ്വയമേവ നിർത്തി കാസ്കേഡിംഗ് പരാജയങ്ങൾ തടയുന്നു.
- ഫോൾട്ട് ഇൻജെക്ഷൻ: നിങ്ങളുടെ ആപ്ലിക്കേഷൻ്റെ പ്രതിരോധശേഷി പരീക്ഷിക്കുന്നതിനായി ട്രാഫിക്കിൽ കാലതാമസമോ പിശകുകളോ ഇൻജെക്റ്റ് ചെയ്യുന്നു.
ഉദാഹരണം: ഇസ്റ്റിയോ ഉപയോഗിച്ചുള്ള കാനറി ഡിപ്ലോയ്മെൻ്റ്
ഒരു കാനറി ഡിപ്ലോയ്മെൻ്റ് നടത്തുന്നതിന്, എപിഐ ഗേറ്റ്വേയുടെ പുതിയ പതിപ്പിലേക്ക് ട്രാഫിക്കിൻ്റെ ഒരു ചെറിയ ശതമാനം (ഉദാഹരണത്തിന്, 10%) അയയ്ക്കാൻ ഇസ്റ്റിയോ കോൺഫിഗർ ചെയ്യാൻ നിങ്ങൾക്ക് കഴിയും.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: api-gateway-virtualservice
spec:
hosts:
- "*" # നിങ്ങളുടെ ഡൊമെയ്ൻ ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുക
gateways:
- api-gateway-gateway
http:
- route:
- destination:
host: api-gateway # പതിപ്പ് 1
port:
number: 8000
weight: 90
- destination:
host: api-gateway-v2 # പതിപ്പ് 2 (കാനറി)
port:
number: 8000
weight: 10
ഒബ്സെർവബിലിറ്റി
നിങ്ങളുടെ എപിഐ ഗേറ്റ്വേയുടെയും ബാക്കെൻഡ് സർവീസുകളുടെയും പ്രകടനവും ആരോഗ്യവും മനസ്സിലാക്കുന്നതിന് നിരീക്ഷണവും ലോഗിംഗും നിർണായകമാണ്. താഴെ പറയുന്ന ടൂളുകൾ ഉപയോഗിച്ച് സമഗ്രമായ ഒബ്സെർവബിലിറ്റി നടപ്പിലാക്കുക:
- പ്രോമിത്യൂസ് (Prometheus): മെട്രിക്കുകൾ ശേഖരിക്കുന്നതിനും സംഭരിക്കുന്നതിനുമുള്ള ഒരു നിരീക്ഷണ സംവിധാനം. സർവീസ് ട്രാഫിക്, ലേറ്റൻസി, പിശകുകൾ എന്നിവയെക്കുറിച്ചുള്ള മെട്രിക്കുകൾ നൽകാൻ ഇസ്റ്റിയോ പ്രോമിത്യൂസുമായി സംയോജിക്കുന്നു.
- ഗ്രാഫാന (Grafana): നിങ്ങളുടെ ആപ്ലിക്കേഷൻ നിരീക്ഷിക്കുന്നതിന് ഡാഷ്ബോർഡുകൾ നിർമ്മിക്കുന്നതിനുള്ള ഒരു ഡാറ്റാ വിഷ്വലൈസേഷൻ ടൂൾ.
- ജേഗർ (Jaeger): നിങ്ങളുടെ മൈക്രോസർവീസുകളിലൂടെ അഭ്യർത്ഥനകൾ സഞ്ചരിക്കുമ്പോൾ അവയെ ട്രാക്ക് ചെയ്യുന്നതിനുള്ള ഒരു ഡിസ്ട്രിബ്യൂട്ടഡ് ട്രെയ്സിംഗ് സിസ്റ്റം. എല്ലാ സർവീസ്-ടു-സർവീസ് ആശയവിനിമയത്തിനും ഇസ്റ്റിയോയ്ക്ക് സ്വയമേവ ട്രെയ്സുകൾ സൃഷ്ടിക്കാൻ കഴിയും.
- ഫ്ലൂയിൻ്റ്ഡി/ഇലാസ്റ്റിക് സെർച്ച്/കിബാന (EFK സ്റ്റാക്ക്): ലോഗുകൾ ശേഖരിക്കുന്നതിനും സംഭരിക്കുന്നതിനും വിശകലനം ചെയ്യുന്നതിനുമുള്ള ഒരു ലോഗിംഗ് സ്റ്റാക്ക്.
ഇസ്റ്റിയോ ടെലിമെട്രി
മെട്രിക്കുകൾ, ലോഗുകൾ, ട്രെയ്സുകൾ എന്നിവയുൾപ്പെടെ സർവീസ് ട്രാഫിക്കിനെക്കുറിച്ചുള്ള ടെലിമെട്രി ഡാറ്റ ഇസ്റ്റിയോ സ്വയമേവ ശേഖരിക്കുന്നു. നിങ്ങളുടെ എപിഐ ഗേറ്റ്വേയുടെയും ബാക്കെൻഡ് സർവീസുകളുടെയും പ്രകടനവും ആരോഗ്യവും നിരീക്ഷിക്കാൻ ഈ ഡാറ്റ ഉപയോഗിക്കാം. പ്രോമിത്യൂസ്, ഗ്രാഫാന, ജേഗർ എന്നിവയിലേക്ക് ടെലിമെട്രി ഡാറ്റ എക്സ്പോർട്ട് ചെയ്യാൻ ഇസ്റ്റിയോ കോൺഫിഗർ ചെയ്യുക.
API ഗേറ്റ്വേ നിർദ്ദിഷ്ട മെട്രിക്കുകൾ
ഇസ്റ്റിയോയുടെ ടെലിമെട്രി ഡാറ്റയ്ക്ക് പുറമേ, നിങ്ങൾ എപിഐ ഗേറ്റ്വേ-നിർദ്ദിഷ്ട മെട്രിക്കുകളും ശേഖരിക്കണം, അവ താഴെ പറയുന്നവയാണ്:
- അഭ്യർത്ഥന നിരക്ക്: ഒരു സെക്കൻഡിലെ അഭ്യർത്ഥനകളുടെ എണ്ണം.
- പ്രതികരണ സമയം: ഒരു അഭ്യർത്ഥന പ്രോസസ്സ് ചെയ്യാൻ എടുക്കുന്ന ശരാശരി സമയം.
- പിശക് നിരക്ക്: ഒരു പിശകിൽ കലാശിക്കുന്ന അഭ്യർത്ഥനകളുടെ ശതമാനം.
- ഓതൻ്റിക്കേഷൻ വിജയ/പരാജയ നിരക്ക്: വിജയകരവും പരാജയപ്പെട്ടതുമായ ഓതൻ്റിക്കേഷൻ ശ്രമങ്ങളുടെ എണ്ണം.
- കാഷെ ഹിറ്റ് നിരക്ക്: കാഷെയിൽ നിന്ന് നൽകുന്ന അഭ്യർത്ഥനകളുടെ ശതമാനം.
സുരക്ഷാ പരിഗണനകൾ
ഒരു എപിഐ ഗേറ്റ്വേ നിർമ്മിക്കുമ്പോൾ സുരക്ഷ പരമപ്രധാനമാണ്. ഇനിപ്പറയുന്ന സുരക്ഷാ നടപടികൾ പരിഗണിക്കുക:
- ഓതൻ്റിക്കേഷനും ഓതറൈസേഷനും: നിങ്ങളുടെ ബാക്കെൻഡ് സർവീസുകളെ പരിരക്ഷിക്കുന്നതിന് ശക്തമായ ഓതൻ്റിക്കേഷൻ, ഓതറൈസേഷൻ സംവിധാനങ്ങൾ നടപ്പിലാക്കുക. JWTs, OAuth 2.0, അല്ലെങ്കിൽ മറ്റ് വ്യവസായ-നിലവാരമുള്ള പ്രോട്ടോക്കോളുകൾ ഉപയോഗിക്കുക.
- ഇൻപുട്ട് വാലിഡേഷൻ: ഇൻജെക്ഷൻ ആക്രമണങ്ങൾ തടയുന്നതിന് എല്ലാ ഇൻകമിംഗ് അഭ്യർത്ഥനകളും സാധൂകരിക്കുക.
- റേറ്റ് ലിമിറ്റിംഗ്: ദുരുപയോഗവും ഡിനയൽ-ഓഫ്-സർവീസ് ആക്രമണങ്ങളും തടയുന്നതിന് റേറ്റ് ലിമിറ്റിംഗ് നടപ്പിലാക്കുക.
- TLS എൻക്രിപ്ഷൻ: എപിഐ ഗേറ്റ്വേയ്ക്കും ബാക്കെൻഡ് സർവീസുകൾക്കും ഇടയിലുള്ള എല്ലാ ആശയവിനിമയവും TLS ഉപയോഗിച്ച് എൻക്രിപ്റ്റ് ചെയ്യുക. ഇസ്റ്റിയോ മ്യൂച്വൽ TLS (mTLS) ഉപയോഗിച്ച് ഓട്ടോമാറ്റിക് TLS എൻക്രിപ്ഷൻ നൽകുന്നു.
- വെബ് ആപ്ലിക്കേഷൻ ഫയർവാൾ (WAF): SQL ഇൻജെക്ഷൻ, ക്രോസ്-സൈറ്റ് സ്ക്രിപ്റ്റിംഗ് (XSS) പോലുള്ള സാധാരണ വെബ് ആപ്ലിക്കേഷൻ ആക്രമണങ്ങളിൽ നിന്ന് പരിരക്ഷിക്കാൻ ഒരു WAF ഉപയോഗിക്കുക.
- പതിവായ സുരക്ഷാ ഓഡിറ്റുകൾ: കേടുപാടുകൾ തിരിച്ചറിയുന്നതിനും പരിഹരിക്കുന്നതിനും പതിവായി സുരക്ഷാ ഓഡിറ്റുകൾ നടത്തുക.
ഇസ്റ്റിയോ ഉപയോഗിച്ചുള്ള മ്യൂച്വൽ TLS (mTLS)
എല്ലാ സർവീസ്-ടു-സർവീസ് ആശയവിനിമയത്തിനും ഇസ്റ്റിയോയ്ക്ക് സ്വയമേവ mTLS നടപ്പിലാക്കാൻ കഴിയും, ഇത് എല്ലാ ആശയവിനിമയവും എൻക്രിപ്റ്റ് ചെയ്യുകയും ഓതൻ്റിക്കേറ്റ് ചെയ്യുകയും ചെയ്യുന്നുവെന്ന് ഉറപ്പാക്കുന്നു. ഇത് ഒളിഞ്ഞുനോക്കലിനും കൃത്രിമത്വത്തിനും എതിരെ ശക്തമായ ഒരു സുരക്ഷാ പാളി നൽകുന്നു.
വിപുലമായ വിഷയങ്ങൾ
GraphQL ഗേറ്റ്വേ
REST API-കൾക്ക് പകരം, കൂടുതൽ കാര്യക്ഷമമായ ഡാറ്റാ ലഭ്യമാക്കലിനായി GraphQL ഉപയോഗിക്കുന്നത് പരിഗണിക്കുക. ഗ്രാഫീൻ (Graphene), അരിയാഡ്നെ (Ariadne) പോലുള്ള ലൈബ്രറികൾ ഉപയോഗിച്ച് ഒരു GraphQL ഗേറ്റ്വേ നടപ്പിലാക്കുക. GraphQL ക്ലയിൻ്റുകൾക്ക് അവർക്ക് ആവശ്യമുള്ള ഡാറ്റ മാത്രം അഭ്യർത്ഥിക്കാൻ അനുവദിക്കുന്നു, ഇത് ഓവർ-ഫെച്ചിംഗ് കുറയ്ക്കുകയും പ്രകടനം മെച്ചപ്പെടുത്തുകയും ചെയ്യുന്നു.
gRPC ഗേറ്റ്വേ
സർവീസുകൾക്കിടയിലുള്ള ഉയർന്ന പ്രകടനശേഷിയുള്ള ആശയവിനിമയത്തിനായി, gRPC ഉപയോഗിക്കുന്നത് പരിഗണിക്കുക. ബാഹ്യ ക്ലയിൻ്റുകൾക്ക് gRPC സർവീസുകൾ തുറന്നുകാട്ടാൻ ഒരു gRPC ഗേറ്റ്വേ നടപ്പിലാക്കുക. gRPC നിർവചനങ്ങളിൽ നിന്ന് RESTful API-കൾ നിർമ്മിക്കാൻ grpc-gateway പോലുള്ള ടൂളുകൾ ഉപയോഗിക്കുക.
സെർവർലെസ് API ഗേറ്റ്വേ
AWS ലാംഡ, ഗൂഗിൾ ക്ലൗഡ് ഫംഗ്ഷൻസ്, അല്ലെങ്കിൽ അസൂർ ഫംഗ്ഷൻസ് പോലുള്ള പ്ലാറ്റ്ഫോമുകൾ ഉപയോഗിച്ച് നിങ്ങളുടെ എപിഐ ഗേറ്റ്വേയെ ഒരു സെർവർലെസ് ഫംഗ്ഷനായി വിന്യസിക്കുക. സെർവർലെസ് എപിഐ ഗേറ്റ്വേകൾ അളക്കാവുന്നതും, ചെലവ് കുറഞ്ഞതും, പ്രവർത്തനപരമായ ഓവർഹെഡ് കുറഞ്ഞതുമാണ്. ഉദാഹരണത്തിന്, എപിഐ ഗേറ്റ്വേയെ പൈത്തണിൽ എഴുതിയ AWS ലാംഡ ഫംഗ്ഷനുകളുമായി സംയോജിപ്പിച്ച് അഭ്യർത്ഥനകൾ പ്രോസസ്സ് ചെയ്യാൻ കഴിയും. ഈ സെർവർലെസ് സമീപനത്തിന് ഇൻഫ്രാസ്ട്രക്ചർ ചെലവ് ഗണ്യമായി കുറയ്ക്കാൻ കഴിയും.
ഉപസംഹാരം
സർവീസ് മെഷ് ഇൻ്റഗ്രേഷനോടുകൂടിയ ഒരു പൈത്തൺ എപിഐ ഗേറ്റ്വേ നിർമ്മിക്കുന്നത് മൈക്രോസർവീസ് ആശയവിനിമയം കൈകാര്യം ചെയ്യുന്നതിനുള്ള ശക്തവും അളക്കാവുന്നതുമായ ഒരു പരിഹാരം നൽകുന്നു. എപിഐ ഗേറ്റ്വേകളുടെയും സർവീസ് മെഷുകളുടെയും ശക്തികൾ സംയോജിപ്പിക്കുന്നതിലൂടെ, നിങ്ങൾക്ക് മെച്ചപ്പെട്ട സുരക്ഷ, ഒബ്സെർവബിലിറ്റി, ട്രാഫിക് മാനേജ്മെൻ്റ് എന്നിവ നേടാൻ കഴിയും. ഉയർന്ന ലഭ്യത, അളക്കാവുന്ന தன்மை, സുരക്ഷ എന്നിവ ആവശ്യമുള്ള ആധുനിക, ക്ലൗഡ്-നേറ്റീവ് ആപ്ലിക്കേഷനുകൾക്ക് ഈ ആർക്കിടെക്ചർ വളരെ അനുയോജ്യമാണ്. നിങ്ങളുടെ നിർദ്ദിഷ്ട ആവശ്യകതകൾ പരിഗണിക്കാനും നിങ്ങളുടെ ആവശ്യങ്ങൾക്ക് ഏറ്റവും അനുയോജ്യമായ ടൂളുകളും സാങ്കേതികവിദ്യകളും തിരഞ്ഞെടുക്കാനും ഓർക്കുക. ഉദാഹരണത്തിന്, ഒരു ചെറിയ കമ്പനി എപിഐ ഗേറ്റ്വേ ആയി കോങും (Kong) സർവീസ് മെഷായി ലിങ്കർഡും (Linkerd) തിരഞ്ഞെടുക്കാൻ താൽപ്പര്യപ്പെട്ടേക്കാം, കാരണം അവയുടെ ഉപയോഗം താരതമ്യേന എളുപ്പമാണ്, അതേസമയം ഒരു വലിയ എൻ്റർപ്രൈസ് അവരുടെ ആർക്കിടെക്ചറിൻ്റെ എല്ലാ വശങ്ങളിലും സൂക്ഷ്മമായ നിയന്ത്രണം ലഭിക്കുന്നതിന് ഇസ്റ്റിയോയും (Istio) ഒരു കസ്റ്റം-ബിൽറ്റ് പൈത്തൺ എപിഐ ഗേറ്റ്വേയും തിരഞ്ഞെടുത്തേക്കാം. ശരിയായ ടൂളുകൾ തിരഞ്ഞെടുക്കുന്നതും മുകളിൽ സൂചിപ്പിച്ച സുരക്ഷാ പരിഗണനകൾ ശ്രദ്ധാപൂർവ്വം നടപ്പിലാക്കുന്നതും വിജയത്തിന് പരമപ്രധാനമാണ്. കൂടാതെ, നിരന്തരം വികസിച്ചുകൊണ്ടിരിക്കുന്ന സാങ്കേതിക രംഗത്ത് ശക്തവും സുരക്ഷിതവുമായ ഒരു എപിഐ ഗേറ്റ്വേ നിലനിർത്തുന്നതിന് തുടർച്ചയായ നിരീക്ഷണവും പൊരുത്തപ്പെടുത്തലും നിർണായകമാണ്.